package com.sunl.mall.ali.mq.api.consumer;


import com.aliyun.openservices.ons.api.Action;
import com.sunl.mall.ali.mq.model.RocketMqMessageBody;
import com.sunl.mall.ali.mq.model.RocketMqMessageContext;
import com.sunl.mall.ali.mq.serializer.RocketMqDeserializer;
import com.sunl.mall.common.api.topic.MqTopic;

/**
 * 自定义listener，支持自定义序列化方式
 *
 * @param <T>
 */
public interface RocketMqMessageListener<T> extends RocketMqDeserializer<T> {

    /**
     * 处理消息
     *
     * @param body    反序列化后的消息体
     * @param context 消息上下文
     * @return Action 接收到消息后执行的操作
     * @throws Exception exception
     */
    Action call(RocketMqMessageBody<T> body, RocketMqMessageContext context) throws Exception;

    /**
     * 订阅主题
     *
     * @return topic
     */
    MqTopic subscribe();

}
